#pragma once

namespace Alice
{
    class World;
    class SceneInterface;
    class PrimitiveSceneProxy;
    class StaticMesh;
    class IPrimitiveComponent
    {
    public:
        virtual World* GetWorld() const = 0;
        virtual SceneInterface* GetScene() const = 0;
        virtual PrimitiveSceneProxy* GetSceneProxy() const = 0;
        virtual PrimitiveSceneProxy* CreateSceneProxy() = 0;
    };
    class IStaticMeshComponent
    {
    public:
	    virtual StaticMesh* GetStaticMesh() const = 0;
        virtual IPrimitiveComponent* GetPrimitiveComponentInterface() = 0;
        inline const IPrimitiveComponent* GetPrimitiveComponentInterface() const
        {
            // use the non-const version and return it as a const object to avoid duplicating the code in implementers
            return (const_cast<IStaticMeshComponent*>(this))->GetPrimitiveComponentInterface();
        }
    };
}